op {
  graph_op_name: "StatelessShuffle"
  visibility: HIDDEN
  in_arg {
    name: "value"
    description: <<END
The tensor to be shuffled.
END
  }
  in_arg {
    name: "key"
    description: <<END
Key for the counter-based RNG algorithm (shape uint64[1]).
END
  }
  in_arg {
    name: "counter"
    description: <<END
Initial counter for the counter-based RNG algorithm (shape uint64[2] or uint64[1] depending on the algorithm). If a larger vector is given, only the needed portion on the left (i.e. [:N]) will be used.
END
  }
  in_arg {
    name: "alg"
    description: <<END
The RNG algorithm (shape int32[]).
END
  }
  out_arg {
    name: "output"
    description: <<END
A tensor of same shape and type as `value`, shuffled along its first
dimension.
END
  }
  summary: "Randomly and deterministically shuffles a tensor along its first dimension."
  description: <<END
The tensor is shuffled along dimension 0, such that each `value[j]` is mapped
to one and only one `output[i]`. For example, a mapping that might occur for a
3x2 tensor is:

```
[[1, 2],       [[5, 6],
 [3, 4],  ==>   [1, 2],
 [5, 6]]        [3, 4]]
```

The outputs are a deterministic function of `value`, `key`, `counter` and `alg`.
END
}
